package 力扣.位运算;

public class BasicTest {
    public static void main(String[] args) {
        int a=4;int b=7;
        char c='c';char d='d';// c=99 : 110 0011 d=100 : 110 0100
        //按位与
        System.out.println(a & b);//同为1 才为1；否则都为零
        System.out.println(c & d);//先转为ASCII 再位运算 同为1
        //按位或
        System.out.println(a | b);//有一个为1就为1，都为1也是
        //按位异或
        System.out.println(a ^ b);//当两对应的二进位相异时，结果为1
        //求反运算,一元运算符  ~(1001) 结果为：0110
        System.out.println(~ b);

        //左移运算 丢弃最高位,0补最低位 口算：乘以 2 的n次方
        //例如： a<<4 指把a的各二进位向左移动4位。如a=00000011(十进制3)，左移4位后为00110000(十进制48)。
        System.out.println(a << b);
        //右移运算 丢弃最低位 右移左补零(无符号数 即正数) 口算： 乘以 2 的n 次方
        //例如：设 a=15，a>>2 表示把00001111右移为00000011(十进制3)
        //注意：有符号数，如负数，一般是补零补一取决于编译系统的规定
        System.out.println(a>>b);
        System.out.println(-5>>1);

        /**
         * Java中的位操作  使用包装类
         *
         * static int Integer.bitCount();           // 统计 1 的数量
         * static int Integer.highestOneBit();      // 获得最高位
         * static String Integer.toBinaryString(int i);     // 转换为二进制表示的字符串
         *
         */


    }
}
